import axios from "axios";
import qs from "querystring"
//https://blog.csdn.net/m0_63953077/article/details/127225387?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-127225387-blog-124289062.pc_relevant_3mothn_strategy_and_data_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-127225387-blog-124289062.pc_relevant_3mothn_strategy_and_data_recovery&utm_relevant_index=5
const errorHandle = (status, info) => {
    switch (status) {
        case 400:
            console.log("语义有误");
            break;
        case 401:
            console.log("服务器认证失败");
            break;
        case 403:
            console.log("服务器拒绝访问");
            break;
        case 404:
            console.log("地址错误");
            break;
        case 500:
            console.log("服务器遇到意外");
            break;
        case 502:
            console.log("服务器无响应");
            break;
        default:
            console.log(info);
            break;
 
    }
}
 
// 创建一个属于自己的网络请求对象
const instance = axios.create({
    // 网络请求的公共配置
    //请求的超时时间为5秒
    timeout: 5000,
    headers: {'tenantId': '000000'}
})
 
// 定义拦截器，拦截器是最常用的。常用于获取数据之前和发送数据之前做一些处理
 
// 发送数据之前的拦截器
instance.interceptors.request.use(
    //config是定义成功的函数
    // config 包含着网络请求的所有信息
	// instance.headers.tenantId='837754'
	
    config => {
        // post请求需要转换格式，要单独处理。如果
        // 字典传递进去抛出"参数缺失,请提供完整参数"的错误,请参考35博客
        if (config.method == "post") {
            config.data = qs.stringify(config.data)
            return config
        }
        // get请求
        if (config.method == 'get') {
            return config
        }
    },
    // error 定义失败的函数
    error => Promise.reject(error)
)
 
// 获取数据之前的拦截器
instance.interceptors.response.use(
    // 成功也仅仅代表收到错误或者收到成功两种        成功                       失败
    response => response.status === 200 ? Promise.resolve(response) : Promise.reject(response),
    error => {
        // 发送和接收的过程存在问题
        // response包含所有错误的信息
        const { response } = error;
        // 错误信息更值得我们关注
        errorHandle(response.status, response.info)
    }
)
 
export default instance;// 导出网络请求